Back to Article
Article Notebook
Download Source

Causal Inference for Computational Social Science

Modeling Political Islam

Author
Affiliation

Christy Hsu

Georgetown University

Published

July 14, 2025

Abstract

Intro

Literature Review

Data Collection

Evidence from Public Opinion Surveys

Carnegie Middle East Governance and Islam Dataset, 1988-2014 (ICPSR 32302)(M. Tessler (2016))1

This dataset from ICPSR contains individual and country level variables from surveys done in the Middle East during 1988 to 2014, integrating 56 surveys to allow two-level, over-time analysis.

1988 Public Opinion Survey

This survey was carried out in mid-1988, with samples drawn from Cairo and Kuwait, targeting the urban Sunni Muslim adults: Egyptians (n = 292), Kuwaitis (n = 300) and Palestinians residing in Kuwait (n = 293).2 This implies that we can generally attribute the following labels for the respondents in the dataset:

  • Sunni Muslim
  • Arab
  • Adult
  • Urban

Allowing for a glimpse into the patterns and variations in attitudes at the individual level, at the same time, the design of this survey project enables us to group these individuals into belonging to three distinct populations:

  • Egyptian citizens
  • Kuwaiti citizens
  • Long-time Palestinian residents of Kuwait

Which, in turn, provides us the opportunity for understanding and comparison at a more coarse level. This survey project also looked forward to the typicality and generalizability of the sample of Egyptians to represent (Tunisians, Algerians, Jordanians, Moroccans); as for the sample of Kuwaitis to represent those living in the Gulf shakhdoms.

Episodes

Episode 1

I first encountered the 1988 public opinion survey while reading Tessler’s “The origins of popular support for Islamist movements: A political economy analysis (1997)”(M. 1941.-. Tessler 1997) Later, I was able to find this dataset available on ICPSR, presented in Carnegie Middle East Governance and Islam Dataset, 1988-2014 (ICPSR 32302)(M. Tessler 2016) This dataset is an effort to gather surveys across the period, reorganize and harmonize the survey items into variables that allow for analysis over time. Therefore, some of survey items that Tessler used in his analysis cannot be found in the dataset, and the codebook contains limited descriptions for the 1988 survey.

As I went on to seek for further details about the 1988 survey, I came across Tessler and Grobschmidt’s study “Democracy in the Arab world and the Arab-Israeli conflict (1995)”.(Garnham and Tessler 1995, Mark Tessler, and Marilyn Grobschmidt. “Democracy in the Arab world and the Arab-Israeli conflict.” pp. 135-169) This earlier analysis led me to learn that the 1988 survey originally included 293 Palestinians residing in Kuwait, while the ICPSR dataset only contains the 292 Egyptian respondents and the 300 Kuwaiti respondents.3

That is, although the dataset I have acquired is already fruitful, yet, relying on it alone would not allow me to replicate many analyses that were done right after 1988. And I could not convince myself not to think about why there were originally three samples originally yet I am now using only two of them because of accessibility.

Therefore, I reached out first to ICPSR. They looked over the version history and did not find any records about the 1988 Palestinian sample nor the original survey instrument. Thus, they kindly contacted Professor Tessler on my behalf. The good new today is that I received professor Tessler’s reply. In the mean time, I truly look forward to learn more about what happened with the Palestinian sample and anticipate the chance of access to the original dataset.

Episode 2

Thanks to the generosity and kindness of Professor Tessler, I have the chance to look into these three groups together. And I worked on to recover the original variables with the researches done in the 1980s, 1990s that used the original variable name, especially:

  • Mark Tessler, and Jamal Sanad, “Will the Arab Public Accept Peace with Israel: Evidence From Surveys in Three Arab Societies.” In Israel at the Crossroads, Gregory Mahler and Efraim Karsh ed. (London: British Academic Press, 1994)(Karsh and Mahler (1994))4
  • David Garnham, and Mark A. Tessler, Democracy, War, and Peace in the Middle East (Bloomington: Indiana University Press, 1995)(Garnham and Tessler (1995))5
  • Mark A. Tessler, and Jolene Jesse, “Gender and Support for Islamist Movements: Evidence from Egypt, Kuwait and Palestine.” The Muslim World 86, no. 2 (1996): 200–228. ATLA0001012290.(“Gender and Support for Islamist Movements: Evidence from... - Georgetown University Law Library (n.d.))
  • Mark Tessler, and Ina Warriner. “Gender, Feminism, and Attitudes toward International Conflict: Exploring Relationships with Survey Data from the Middle East.” World Politics 49, no. 2 (1997): 250–81. https://doi.org/10.1353/wp.1997.0005.(M. Tessler and Warriner (1997))
  • Mark Tessler, “The Origins of Popular Support for Islamist Movements: A Political Economy Analysis.” Islam, Democracy, and the State in North Africa, (Bloomington: Indiana University Press, 1997)

Episode 3

After reading the related materials, I was able to map most of the variables to the corresponding questions that were asked. I later went on to recover some of the variables that were not decoded properly.6

Place the Model

Dependent and Independent Variables

Preparing the variables

In [1]:
library(tidyverse)
── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
✔ dplyr     1.1.4     ✔ readr     2.1.5
✔ forcats   1.0.0     ✔ stringr   1.5.1
✔ ggplot2   3.5.1     ✔ tibble    3.3.0
✔ lubridate 1.9.3     ✔ tidyr     1.3.1
✔ purrr     1.0.2     
── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
✖ dplyr::filter() masks stats::filter()
✖ dplyr::lag()    masks stats::lag()
ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(psych)

Attachement du package : 'psych'

Les objets suivants sont masqués depuis 'package:ggplot2':

    %+%, alpha
In [2]:
ekp_df <- read_csv('data/ekp-1988-survey.csv')
Rows: 885 Columns: 213
── Column specification ────────────────────────────────────────────────────────
Delimiter: ","
chr (159): group_name, country_name, age, GROUP, Q1, Q2, Q3, Q4, Q5, Q6, Q7,...
dbl  (54): obs_idx, group_idx, country_idx, female, Q10, supp_islam_mov, rel...

ℹ Use `spec()` to retrieve the full column specification for this data.
ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
ekp_df |> colnames()
  [1] "obs_idx"               "group_name"            "group_idx"            
  [4] "country_name"          "country_idx"           "female"               
  [7] "age"                   "GROUP"                 "Q1"                   
 [10] "Q2"                    "Q3"                    "Q4"                   
 [13] "Q5"                    "Q6"                    "Q7"                   
 [16] "Q8"                    "Q9"                    "Q10"                  
 [19] "Q11P1"                 "Q11P2"                 "Q11P3"                
 [22] "Q11P4"                 "Q11P5"                 "Q12"                  
 [25] "Q13"                   "Q14"                   "Q15"                  
 [28] "Q16"                   "Q17"                   "Q18"                  
 [31] "Q19"                   "Q20"                   "Q21"                  
 [34] "Q22"                   "Q23"                   "Q24"                  
 [37] "Q25"                   "Q26"                   "Q27"                  
 [40] "Q28"                   "Q29P1"                 "Q29P2"                
 [43] "Q29P3"                 "Q29P4"                 "Q29P5"                
 [46] "Q29P6"                 "Q29P7"                 "Q29P8"                
 [49] "Q30"                   "Q31"                   "Q32"                  
 [52] "Q33P1"                 "Q33P2"                 "Q33P3"                
 [55] "Q33P4"                 "Q33P5"                 "Q34"                  
 [58] "Q35P1"                 "Q35P2"                 "Q35P3"                
 [61] "Q35P4"                 "Q35P5"                 "Q35P6"                
 [64] "Q36"                   "Q37P1"                 "Q37P2"                
 [67] "Q37P3"                 "Q37P4"                 "Q37P5"                
 [70] "Q37P6"                 "Q37P7"                 "Q37P8"                
 [73] "Q37P9"                 "Q37P10"                "Q37P11"               
 [76] "Q38"                   "Q39"                   "Q40"                  
 [79] "Q41"                   "Q42"                   "Q43"                  
 [82] "Q44"                   "Q45"                   "Q46"                  
 [85] "Q47"                   "Q48"                   "Q49"                  
 [88] "Q50P1"                 "Q50P2"                 "Q50P3"                
 [91] "Q50P4"                 "Q51"                   "Q52"                  
 [94] "Q53"                   "Q54"                   "Q55"                  
 [97] "Q56"                   "Q57"                   "Q58"                  
[100] "Q59"                   "Q60"                   "Q61"                  
[103] "Q62"                   "Q63"                   "Q64"                  
[106] "Q65"                   "Q66P1"                 "Q66P2"                
[109] "Q66P3"                 "Q66P4"                 "Q66P5"                
[112] "Q67"                   "Q68"                   "Q69"                  
[115] "Q70P1"                 "Q70P2"                 "Q70P3"                
[118] "Q71"                   "Q72"                   "Q73P1"                
[121] "Q73P2"                 "Q73P3"                 "Q73P4"                
[124] "Q73P5"                 "Q74P1"                 "Q74P2"                
[127] "Q74P3"                 "Q74P4"                 "Q75"                  
[130] "Q76"                   "Q77"                   "Q78"                  
[133] "Q79P1"                 "Q79P2"                 "Q79P3"                
[136] "Q79P4"                 "Q79P5"                 "Q79P6"                
[139] "Q80"                   "Q81"                   "Q82"                  
[142] "Q83"                   "Q84"                   "Q85"                  
[145] "Q86"                   "Q87"                   "Q88"                  
[148] "Q89"                   "Q90"                   "Q91"                  
[151] "Q92"                   "Q93"                   "Q94"                  
[154] "Q95"                   "Q96"                   "Q97"                  
[157] "Q98"                   "Q99"                   "Q100"                 
[160] "Q101"                  "Q102"                  "supp_islam_mov"       
[163] "relg_awakening"        "pol_islam"             "pol_islam_binary"     
[166] "quran_freq"            "ref_relg_freq"         "personal_islam"       
[169] "sharia_sociolife"      "sharia_crim_civ"       "relg_study"           
[172] "social_islam"          "sep_relg_politics"     "priv_relg"            
[175] "opp_pol_relg"          "per_id"                "nation_id"            
[178] "pol_efficacy"          "pol_active"            "be_pol_active"        
[181] "polpart_shura"         "uni"                   "student"              
[184] "unemployed"            "finan_satis"           "gov_ignore_ppl"       
[187] "offic_selfinterest"    "obey_lead"             "caliphate"            
[190] "over40"                "coop"                  "west_values_corrupt"  
[193] "censor_west"           "west_reason_underdev"  "muslim_brotherhood"   
[196] "islamist"              "arab_nationalism"      "socialism"            
[199] "liberalism"            "income"                "us_me_policies"       
[202] "us_relation"           "arab_israel_sol"       "life_security"        
[205] "newspaper_freq"        "rev_sep_relg_politics" "rev_priv_relg"        
[208] "pol_islam0"            "persocio_islam0"       "pol_act0"             
[211] "att_us0"               "critic_gov0"           "neg_west0"            
In [3]:
islam_cols <- c("supp_islam_mov", "relg_awakening", "quran_freq", "ref_relg_freq", "sharia_sociolife", "sharia_crim_civ", "relg_study", "sep_relg_politics", "priv_relg")
islam_df <- ekp_df |> dplyr::select(all_of(islam_cols))
fa.parallel(islam_df, fa = "fa", n.iter = 100, show.legend = TRUE)

Parallel analysis suggests that the number of factors =  4  and the number of components =  NA 
fa_islam <- fa(islam_df, nfactors = 4, rotate = "varimax", fm = "ml")
fa.diagram(fa_islam)

Base Model: Linear Regression

In [4]:
library(lme4)
Le chargement a nécessité le package : Matrix

Attachement du package : 'Matrix'
Les objets suivants sont masqués depuis 'package:tidyr':

    expand, pack, unpack
In [5]:
source('data/stat_binscatter.r')
In [6]:
group_labels <- c(
  "Egyptian"    = "Egyptian (n = 292)",
  "Kuwaiti"     = "Kuwaiti (n = 300)",
  "Palestinian" = "Palestinian (n = 293)"
)
In [7]:
eg_lm <- lm(pol_islam0 ~ persocio_islam0, data = ekp_df|> filter(group_name == "Egyptian"))
ku_lm <- lm(pol_islam0 ~ persocio_islam0, data = ekp_df|> filter(group_name == "Kuwaiti"))
pa_lm <- lm(pol_islam0 ~ persocio_islam0, data = ekp_df|> filter(group_name == "Palestinian"))
full_lm <- lm(pol_islam0 ~ persocio_islam0, data = ekp_df)
adapt_lm <- lmer(pol_islam0 ~ persocio_islam0 + (1 + persocio_islam0 | group_name), data = ekp_df)

full_coef <- tibble(
  group_name = unique(ekp_df$group_name),
  model = "Full pooling",
  intercept = full_lm$coefficients["(Intercept)"],
  slope = full_lm$coefficients["persocio_islam0"]
)

adapt_coef <- coef(adapt_lm)$group_name |>
  rownames_to_column("group_name") |>
  rename(intercept = `(Intercept)`,
         slope = persocio_islam0) |>
  mutate(model = "Adaptive pooling")

no_coef <- bind_rows(
  tibble(group_name = "Egyptian",
         model = "No pooling",
         intercept = eg_lm$coefficients[["(Intercept)"]],
         slope = eg_lm$coefficients[["persocio_islam0"]]),
  tibble(group_name = "Kuwaiti",
         model = "No pooling",
         intercept = ku_lm$coefficients[["(Intercept)"]],
         slope = ku_lm$coefficients[["persocio_islam0"]]),
  tibble(group_name = "Palestinian",
         model = "No pooling",
         intercept = pa_lm$coefficients[["(Intercept)"]],
         slope = pa_lm$coefficients[["persocio_islam0"]])
)
coef_df <- bind_rows(full_coef, adapt_coef, no_coef)
p3 <- ggplot(ekp_df, aes(x = persocio_islam0, y = pol_islam0)) +
  stat_binscatter(
    aes(group = group_name),
    geom = "pointrange",
    bins = 8
  ) +
  geom_abline(
    data = coef_df,
    aes(
      intercept = intercept,
      slope = slope,
      color = model,
      linetype = model
    ),
    linewidth = 1.3
  ) +
  facet_wrap(~ group_name, labeller = labeller(group_name = group_labels)) +
  theme_bw() +
  labs(
    title = "Multilevel Regression",
    x = "Personal and Social Islam",
    y = "Political Islam",
    color = "Model",
    linetype = "Model"
  ) +
  scale_color_manual(
    values = c(
      "Full pooling" = "darkgreen",
      "No pooling" = "purple",
      "Adaptive pooling" = "black"
    )
  ) +
  scale_linetype_manual(
    values = c(
      "Full pooling" = 1,
      "No pooling" = 3,
      "Adaptive pooling" = 2
    )
  )
ggsave(filename = "image/multilevel-regression-p3.png", plot = p3, width = 22, height = 8)

Garnham, David, and Mark A. Tessler. 1995. Democracy, War, and Peace in the Middle East. Indiana Series in Arab and Islamic Studies. Bloomington, IN: Indiana University Press.
“Gender and Support for Islamist Movements: Evidence from... - Georgetown University Law Library.” n.d. https://wrlc-gulaw.primo.exlibrisgroup.com. Accessed July 27, 2025.
Karsh, Efraim, and Gregory S. Mahler. 1994. Israel at the Crossroads: The Challenge of Peace. London ; British Academic Press.
Tessler, Mark. 2016. “Carnegie Middle East Governance and Islam Dataset, 1988-2014.” Inter-university Consortium for Political and Social Research. https://doi.org/10.3886/ICPSR32302.v6.
Tessler, Mark 1941-. 1997. “The Origins of Popular Support for Islamist Movements: A Political Economy Analysis.” Islam, Democracy, and the State in North Africa, 93.
Tessler, Mark, and Ina Warriner. 1997. “Gender, Feminism, and Attitudes Toward International Conflict: Exploring Relationships with Survey Data from the Middle East.” World Politics 49 (2): 250–81. https://doi.org/10.1353/wp.1997.0005.

  1. Tessler, Mark. Carnegie Middle East Governance and Islam Dataset, 1988-2014. Inter-university Consortium for Political and Social Research [distributor], 2016-04-28. https://doi.org/10.3886/ICPSR32302.v6↩︎

  2. ICPSR 32302 codebook, Garnham and Tessler (1995), pp. 164-166. Namely, Kuwaiti Shii muslims, Egyptian Christians and Palestinian Christians were excluded.↩︎

  3. and in 1992 Tessler had already finished writing his research “The Origin of Popular Support for Islamist movements” as a part of a research project launched by USAID, yet, it was till 1997 that the paper was rewritten and published↩︎

  4. pp. 48-70↩︎

  5. Mark Tessler, and Marilyn Grobschmidt. “Democracy in the Arab world and the Arab-Israeli conflict.”, pp. 135-169↩︎

  6. most of them were variables that ask the respondent to rank↩︎